#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "rubrica.h"

#define DEBUG 1

pPersona testa=NULL; // puntatore a persona
int id=0; // identificativo univoco persona

int main(int argc, const char *argv[]) {
	printf ("Content-type: text/html\n\n");
	heder_HTML("Rubrica","FFFFFF");

	FILE *file = fopen("./archivio.txt","r+");
	if(file == NULL) errore("Impossibile aprire il file");
	
	leggi_file(file);
	
	if(getValue("inserisci") != NULL)
	{
		aggiungi(inserisci(++id, getValue("nome"), getValue("cognome"), getValue("telefono_fisso"), getValue("cellulare"), atoi(getValue("sesso")), getValue("indirizzo"), atoi(getValue("eta")), getValue("professione")));
		// gestire errore se campo vuoto o variabile nn definita
	}
	else if(getValue("visualizza") != NULL)
	{
		stampa_persone();
	}
	else if(getValue("modifica") != NULL)
	{
		// modifica 
	}
	else if(getValue("cancella") != NULL) 
	{
		// cancella 
	}
	else if(getValue("cerca") != NULL) 
	{
		// cerca 
	}
	else if(getValue("ordine") != NULL) 
	{
		// ordine 
	}
	stampa_persone();
	footer_HTML();
	//salva_file(file);
	fclose(file);
	return 0;
}


int leggi_file(FILE *file){
	unsigned int lid;
	char tnome[100];
	char tcognome[100];
	char ttelefono_fisso[100];
	char tcellulare[100];
	unsigned short sesso;
	char tindirizzo[100];
	unsigned short eta;
	char tprofessione[100];

	while(fscanf(file,"%d %s %s %s %s %d %s %d %s\n",&lid, tnome,tcognome, ttelefono_fisso, tcellulare, &sesso, tindirizzo, &eta, tprofessione) != EOF){

		char *nome = malloc(strlen(tnome)+1);
		strcpy(nome,tnome);
		char *cognome = malloc(strlen(tcognome)+1);
		strcpy(cognome,tcognome);
		char *telefono_fisso = malloc(strlen(ttelefono_fisso)+1);
		strcpy(telefono_fisso,ttelefono_fisso);
		printf("Tel preso: %s<br>",ttelefono_fisso);
		char *cellulare = malloc(strlen(tcellulare)+1);
		printf("Cell preso: %s<br>",tcellulare);
		strcpy(cellulare,tcellulare);
		char *indirizzo = malloc(strlen(tindirizzo)+1);
		strcpy(indirizzo,tindirizzo);
		char *professione = malloc(strlen(tprofessione)+1);
		strcpy(professione,tprofessione);
		pPersona t = inserisci(lid,nome,cognome,telefono_fisso,cellulare,sesso,indirizzo,eta,professione);
		id++;
		//stampa_persona(t);
		aggiungi(t);
	}
}


void salva_file(FILE *fp)
{
	int i = 0;
	pPersona p = testa;

	while(p != NULL)
	{
		fprintf(fp,"%d %s %s %s %s %d %s %d %s\n",p->id,p->nome,p->cognome,p->telefono_fisso,p->cellulare,p->sesso,p->indirizzo,p->eta,p->professione);
		printf("Saving: %d %s %s %s %s %d %s %d %s<br>",p->id,p->nome,p->cognome,p->telefono_fisso,p->cellulare,p->sesso,p->indirizzo,p->eta,p->professione);
		p = p->next;
	}
}

// aggiunge a 
int aggiungi(pPersona nuova){
	int i;
	pPersona p, previous;

	if(testa == NULL){
		testa = nuova;
		return 0;
	}
	else{
		for(p = testa;p != NULL;p = p->next) {
			previous = p;
		}
		previous->next = nuova;
		return 1;
	}
}

pPersona inserisci(int id, char *nome, char *cognome, char *telefono_fisso, char *cellulare, int sesso, char *indirizzo, int eta, char *professione) {
	pPersona temp = malloc(sizeof(persona));
	temp->nome = nome;
	temp->cognome = cognome;
	temp->telefono_fisso = telefono_fisso;
	temp->cellulare = cellulare;
	temp->sesso = sesso;
	temp->indirizzo = indirizzo;
	temp->eta = eta;
	temp->professione = professione;
	if(id == 0) temp->id=id;
	else temp->id = id;
	temp->next=NULL;
	//printf("%d %s %s %s %s %d %s %d %s\n",id, nome,cognome, telefono_fisso, cellulare, sesso, indirizzo, eta, professione);
	return temp;
}

char* getValue(char * var) {

        char testo[300];
	strcpy(testo,getenv("QUERY_STRING"));
	char *tstr; // string temporanea
	char *sep = "?=&"; // separatori di linea
	char *brkt; // vettore temporaneo per strtok

	int n=0; // usata per pari/dispari
	int trovato= 0;

	for (tstr = strtok_r(testo, sep, &brkt); tstr ; tstr = strtok_r(NULL, sep, &brkt)){
	
		if(n==0){ // indice pari
			n=1;
			#ifdef DEBUG
			printf("1 %s\n",tstr);
			#endif
			if(strcmp(var,tstr) ==0) trovato = 1;
		}		
		else{ // indice dispari
			n=0;
			#ifdef DEBUG
			printf("2 %s\n",tstr);
                        #endif
			if(trovato) {
				char * value = (char *)malloc(sizeof(char) * strlen(tstr));
				strcpy(value, tstr);
				return value;
			}
		}
        }

	return NULL;
}

void stampa_persona(pPersona p) {
	printf("<td>Id<td>: <td>%d</td>", p->id);
	printf("<td>Nome<td>: <td>%s</td>", p->nome);
	printf("<td>Cognome<td>: <td>%s</td>", p->cognome);
	printf("<td>Telefono<td>: <td>%s</td>", p->telefono_fisso);
	printf("<td>Cellulare<td>: <td>%s</td>", p->cellulare);
	printf("<td>Sesso<td>: <td>%d</td>", p->sesso);
	printf("<td>Indirizzo<td>: <td>%s</td>", p->indirizzo);
	printf("<td>Eta'<td>: <td>%d</td>", p->eta);
	printf("<td>Professione<td>: <td>%s</td>", p->professione);
}

void stampa_persone() {
	pPersona p;
	printf("<table>");
	for(p = testa;p != NULL;p = p->next) {
		printf("<tr>");
		stampa_persona(p);
		printf("</tr>");
	}
	printf("</table>");
}

void errore(char * err) {
	printf("ERRORE: %s<br>",err);
}

void heder_HTML(char *titolo_pagina, char * colore_sfondo) {
	printf("<html>\n");
	printf("<head>\n");
	printf("<title>%s</title>",titolo_pagina);
	printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">");
	printf("</head>\n");
	printf("<body bgcolor=\"#%s\" text=\"#000000\">",colore_sfondo);
}

void footer_HTML() {
	printf("</body>");
	printf("</html>\n");
}